package co.edu.usbcali.egrapico.logica;

import java.util.StringTokenizer;

/**
 * Clase para la traducci�n de la representaci�n de una
 * <Code>Lista de Identificadores</Code> desde <I>GraPiCO Textual</I> hacia
 * <I>C�lculo PiCO</I>. <P> Recibe en <I>GraPiCO Textual</I> (variables,
 * par�metros o nombres):<P> <Blockquote><Pre> Identificador_1, ... , Identificador_n
 * </Pre></Blockquote> <P> Traducci�n a <I>C�lculo PiCO</I> de cada
 * constructor:<P> <Blockquote><Pre> Identificador_1, ... , Identificador_n </Blockquote></Pre>
 *
 * @author Johanna Noguera Le�n & Alejandro Berm�dez Mart�nez.
 * @version 1.0
 * @since Enero de 2005.
 */
public class IdentifiersList {

    // Variable para almacenar la lista de Identificadores representada en c�lculo PiCO.
    String identifiersListPico = "";
    // Tipo de identificador a traducir
    String identifierType = "";

    /*
     * Variable tokenizada para guardar los identificadores en GraPiCO textual
     * obtenidos de la lista de identificadores.
     */
    StringTokenizer stIdentifiersGraPicoT;
    // Nombre o lista de nombres de los procesos que se est�n traduciendo.
    String nameCurrentProcess = "";

    /**
     * M�todo constructor de la clase
     * <Code>IdentifiersList</Code>.<P> Toma una
     * <Code>Lista de Identificadores</Code> representada en <I>GraPiCO
     * Textual</I> y separa los identificadores usando el s�mbolo de
     * sincronizaci�n coma (","), guard�ndolos en un
     * <Code>String</Code> tokenizado.
     *
     * @param identifiersListGraPicoT Expresi�n equivalente a la representaci�n
     * de una
     * <Code>Lista de Identificadores</Code> en <I>GraPiCO Textual</I>.
     * @param identifierListType Tipo de
     * <Code>Lista de Identificadores</Code>. Puede ser:<P> <Blockquote><Pre>
     *                             "V" - lista de variables.
     *                             "N" - lista de nombres.
     *                             "P" - lista de par�metros.</Pre></Blockquote>
     * @param nameProcess Nombre o lista de nombres de los procesos que se est�n
     * traduciendo.
     */
    public IdentifiersList(String identifiersListGraPicoT,
            String identifierListType,
            String nameProcess) {

        // Se obtiene proceso o lista de procesos.
        nameCurrentProcess = nameProcess;

        //Los identificadores en GraPiCO textual son almacenados en un string
        //tokenizado
        stIdentifiersGraPicoT = new StringTokenizer(identifiersListGraPicoT, ",");
        identifierType = identifierListType;
    }

    /**
     * M�todo generador de la traducci�n de una
     * <Code>Lista de Identificadores</Code>.<P> Se obtiene la traducci�n de
     * cada
     * <Code>Identificador</Code> que se obtiene del string tokenizado de
     * identificadores en <I>GraPiCO Textual</I> y se concatenan separ�ndolos
     * con el s�mbolo de sincronizaci�n coma (",") para formar as� una
     * <Code>Lista de Identificadores</Code> representada en <I>C�lculo
     * PiCO</I>.
     *
     * @return la
     * <Code>Lista de Identificadores</Code> traducida a <I>C�lculo PiCO</I>.
     */
    public String traslate() {
        int nuSize = stIdentifiersGraPicoT.countTokens();
        while (stIdentifiersGraPicoT.hasMoreTokens()) {
            Identifier identifier = new Identifier(stIdentifiersGraPicoT.nextToken(), identifierType, nameCurrentProcess);
            if (nuSize != 1) {
                identifiersListPico += identifier.traslate() + " , ";
            } else {
                identifiersListPico += identifier.traslate();
            }
            nuSize--;
        }
        return identifiersListPico;
    }
}